/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package controller;

import java.io.File;
import java.io.IOException;
import java.io.Serializable;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import javax.faces.FacesException;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.imageio.stream.FileImageOutputStream;
import javax.servlet.ServletContext;
import model.DetEscrituras;
import model.dao.DetEscriturasDAO;
import model.dao.Impl.DetEscriturasDAOImpl;
import org.primefaces.event.CaptureEvent;

/**
 *
 * @author JuanFernando
 */
@ManagedBean
@SessionScoped
public class DetEscriturasBean implements Serializable {

    //Variable lista que es una lista de tipo TCargos segun el modelo
    //Variable objSelect que es un objeto del tipo TCargos que recibira el objeto seleccionado en la vista
    private List<DetEscrituras> lista;
    private DetEscrituras objSeleccionado = new DetEscrituras();
    private String srchDocumento = new String();
    private Date fechaInicial = new Date();
    private Date fechaFinal = new Date();
    private String titulo = "Detalle Escrituras";
    private String filename;

    /**
     * Creates a new instance of DetEscriturasBean
     */
    public DetEscriturasBean() {
        this.lista = new ArrayList<DetEscrituras>();
        this.objSeleccionado = new DetEscrituras();

        this.srchDocumento = "";

        this.fechaFinal = new Date();

        Calendar fInicial = Calendar.getInstance();
        fInicial.add(Calendar.DATE, -1060);

        this.fechaInicial = fInicial.getTime();
    }

    public List<DetEscrituras> getLista() {
        DateFormat df = new SimpleDateFormat("MM/dd/yyyy");

        Calendar fFinal = Calendar.getInstance();
        fFinal.setTime(this.fechaFinal);
        fFinal.add(Calendar.DATE, 1);

        DetEscriturasDAO consulta = new DetEscriturasDAOImpl();

        String sql;
        sql = "from DetEscrituras as tbl where "
                + "tbl.documento like '%" + this.srchDocumento + "%' "
                + "tbl.fechaCrea >= '" + df.format(this.fechaInicial) + "' "
                + "AND tbl.fechaCrea <= '" + df.format(fFinal.getTime()) + "' "
                + "Order by id Desc";
        sql = "from DetEscrituras where "
                + "documento like '%" + this.srchDocumento + "%' Order by id Desc";

        return consulta.findAll(sql);
    }

    public void setLista(List<DetEscrituras> lista) {
        this.lista = lista;
    }

    public DetEscrituras getObjSeleccionado() {
        return objSeleccionado;
    }

    public void setObjSeleccionado(DetEscrituras objSeleccionado) {
        this.objSeleccionado = objSeleccionado;
    }

    public String getTitulo() {
        return titulo;
    }

    public void setTitulo(String titulo) {
        this.titulo = titulo;
    }

    /**
     * insert() * inserta un nuevo registro en la base de datos crea un nuevo
     * objeto de tipo DAOImpl asigna id en cero para no enviar nulos a la base
     * de datos asigna el usuario que esta trabajando en sesion
     *
     * @author jfgomez
     * @param actionEvent
     */
    public void insert(ActionEvent actionEvent) {

        DetEscriturasDAO consulta = new DetEscriturasDAOImpl();

        this.objSeleccionado.setId(0);
        this.objSeleccionado.setUsuarioCrea("jfgomez");

        consulta.save(this.objSeleccionado);
        limpiaObjSeleccionado();
    }

    /**
     * update() * actualiza el registtro seleccionado en la base de datos crea
     * un nuevo objeto de tipo DAOImpl asigna el usuario que esta trabajando en
     * sesion
     *
     * @author jfgomez
     * @param actionEvent
     */
    public void update(ActionEvent actionEvent) {
        DetEscriturasDAO consulta = new DetEscriturasDAOImpl();
        this.objSeleccionado.setUsuarioModifica("jfgomez");
        consulta.update(this.objSeleccionado);
    }

    private String getRandomImageName() {
        int i = (int) (Math.random() * 10000000);

        return String.valueOf(i);
    }

    public String getFilename() {
        return filename;
    }

    public void oncapture(CaptureEvent captureEvent) {
        filename = getRandomImageName();
        byte[] data = captureEvent.getData();

        this.objSeleccionado.setFoto(data);

        ServletContext servletContext = (ServletContext) FacesContext.getCurrentInstance().getExternalContext().getContext();
        String newFileName = servletContext.getRealPath("") + File.separator + "resources/img" + File.separator + filename + ".jpeg";

        FileImageOutputStream imageOutput;
        try {
            imageOutput = new FileImageOutputStream(new File(newFileName));
            imageOutput.write(data, 0, data.length);
            imageOutput.close();
        } catch (IOException e) {
            throw new FacesException("Error in writing captured image.", e);
        }
    }

    public void limpiaObjSeleccionado() {
        this.objSeleccionado.setDocumento("");
        this.objSeleccionado.setNombre("");
        this.objSeleccionado.setContacto("");
        this.objSeleccionado.setObservacionDetalle("");
        this.objSeleccionado.setFoto(new byte[0]);
        this.filename = "";
    }

    public String getSrchDocumento() {
        return srchDocumento;
    }

    public void setSrchDocumento(String srchDocumento) {
        this.srchDocumento = srchDocumento;
    }

    public void inicializarConsulta() {
        this.srchDocumento = "";
    }

}
